Control de un circuito no lineal


En esta wiki, ilustraremos el control de un circuito eléctrico, que presenta una no linealidad. El circuito es el siguiente:
Toma.jpg


tomaremos como entrada la tensión de la fuente u y como salida, la intensidad de la segunda rama i.
Este circuito tiene una conductancia G no lineal de manera que:

Ecuacion_15.jpg


Si aplicamos la II Ley de Kirchoff a la primera malla nos queda que:



Ecuacion_2.jpg

Aplicando ahora la II LK en la segunda malla tenemos:
Ecuacion_3.jpg
Y aplicando nudos en el nudo de arriba nos queda:


Ecuacion_4.jpg

Por lo tanto elegimos como ecuaciones de estado para nuestro modelo:
Ecuacion_5.jpg


Tal y como muestra la figura, se considerará que L=R=C=1.
Ahora tenemos que buscar un punto de trabajo, para poder linealizar f2.

En un primer momento puede parecer que el punto de trabajo i=v=0, u=1 es un buen punto, pero al desarrollar este punto da problemas, ya que ofrece una ganancia negativa en la función de transferencia y el sistema es inestable. Por ello, buscaremos otro punto de trabajo, fijamos i=1 y v=1 y hayamos u.

Usando la segunda ecuación tenemos:


Ecuacion_6.jpg


Ecuacion_7.jpg

que nos da el valor:

u = 5,079595623

Por lo tanto tenemos el vector de equilibrio xe=(5.079595623,1,1), que por supuesto cumple que f1(xe)=f2(xe )=0.

Linelización de las funciones

Las no linealidades pueden aproximarse razonablemente por expresiones lineales, siempre y cuando las variables no se alejen demasiado de un punto de operación.

Vamos ahora a linealizar la función f2 que es en la que tenemos la no linealidad. Para ello expandimos por Taylor la función entorno al punto de trabajo, calculado esto nos dará nuevas variables i*, v*, u*, que realmente expresarán un incremento de la variable. La función de transferencia, no será realmente la salida entre la entrada, si no que será la relación entre la salida “estrellada” y la entrada “estrellada”. Si el incremento de las variables es pequeño, podemos despreciar los términos de orden mayor que dos, sin que esto suponga un error notable.

Por Taylor:
Ecuacion_8.jpg



Por tanto las ecuaciones de estado que nos quedan son
Ecuacion_9.jpg



Representación en el Espacio de Estados

Para obtener la función de transferencia del sistema, recurriremos a la descripción interna del sistema. Para ello distinguiremos entre:

  • Variable de salida: i*
  • Variable de entrada: u*
  • Variable de estado: v*

Para ello definiremos la matriz A (matriz de estado), B(matriz de entrada) y C (matriz de salida, quedando nuestro sistema:
Ecuacion_10.jpg





Concretando ahora con nuestro sistema nos queda que:
Ecuacion_11.jpg


Quedando la representación en el espacio de estados como:

Ecuacion_12.jpg


Tomando transformada de Laplace y despejando, nos queda que finalmente que


G*(s)=(C(sI-A)-1B)

Nota, para más información :
en.wikipedia.org/wiki/State_space_(controls)

Implementación en MATLAB

En MATLAB tenemos dos opciones:
Una y menos recomendable es, meter s como parámetro mediante syms y aplicar la fórmula. Este método nos puede dar fallos ya que si la matriz no está muy bien condicionada, MATLAB puede cometer fallos al tratar s como parámetro.

La opción más fiable, es usar el ToolBox de control, en este caso los comandos serían:

Sys=ss(A,B,C,D) *La matriz D es igual a 0
Gs=ss2tf(A,B,C,D)


En nuestro circuito en particular MATLAB nos da la siguiente función de transferencia:

Ecuacion_13.jpg

*Nota: la función de transferencia si hubiésemos cogido u=1, i=v=0 hubiese sido:

Ecuacion_14.jpg

Que es inestable y además tiene ganancia negativa, lo que lo hace muy difícil de compensar.


La respeusta escalón de nuestro sistemaserá pues:
step.jpg


y el lugar de las raices:
asdasdf.jpg



Respuesta y control digital del sistema

La function de transferencia es:
s=tf('s')
Gc=13.13/(s^2+14.13*s+14.13)


13.13
---------------------
s^2 + 14.13 s + 14.13

Vamos a proceder a discretizarla:
Esto es el tiempo de muestreo
T=0.1

Discretizamos nuestra funcion de transferencia
Gd=c2d(Gc,T,'zoh')

0.04271 z + 0.02679
----------------------
z^2 - 1.169 z + 0.2434
Como no nos dicen nada, elegimos emplear el Holder0

Podemos obtener la respuesta ante entrada escalón
Empleando el siguiente comando:
step(Gd)
Nosotros vamos a emplear la herranmienta ltiview:
Le damos a File->Import->Gd
Luego en Characteristics podemos ver el tiempo de subida, tiempo de establecimiento y demás parámetros, podemos ver la respuesta y los parámetros en el siguiente gráfico:


Garvin.jpg



Vemos que:
La sobreoscilacion es nula.
Tiempo de subida es 0.925 segundos
Tiempo de establecimiento es 1.68 segundos

La respuesta ante entrada escalón unitario es 0.482
El tiempo de pico se alcanza en 3.48 segundos.
El error en régimen permanente es 1-0.482=0.5180

Para T=0.5s es todo análogo.
Tenemos que la función de transferencia discretizada es:

0.3397 z + 0.04825
--------------------------
z^2 - 0.5833 z + 0.0008545
La respuesta ante entrada escalón unitario es:Garvin1.jpg

La sobreoscilacion es 0.894
Tiempo de subida es 0.787 segundos
Tiempo de establecimiento es 1.04 segundos

La respuesta ante entrada escalón unitario es 0.482
El tiempo de pico se alcanza en 1.5 segundos, realmente no es un tiempo de pico, ya que el sistema no se comporta como sistema de segundo orden sobreamortiguado.
El error en régimen permanente es 1-0.482=0.5180


Para T=1s es todo análogo
La función de transferencia en discreto es:
0.5861 z + 0.02848
---------------------------
z^2 - 0.3386 z + 7.302e-007
Garvin2.jpg
La sobreoscilacion es 21.17%
Tiempo de subida es 0.657 segundos
Tiempo de establecimiento es 2.21 segundos

La respuesta ante entrada escalón unitario es 0.482
El tiempo de pico se alcanza en 0.586 segundos.
El error en régimen permanente es 1-0.482=0.5180

Vemos que al ir aumentando el tiempo de muestreo, el sistema va perdiendo semejanza con el que tendríamos si empleásemos la función de transferencia en continuo.


Adición de retardo al sistema
Nuestro retardo es:
Garvin3.jpg


Se cumple que l=0,2, l es un entero entre 0 y 1
Garvin4.jpg


ga4.jpg

ga44.jpg



Lugar de las Raíces y Ganancia crítica

Para T=0.1 el lugar de las raíces es:
asd.jpg

Vemos que el sistema se hace inestable cuando hay polos fuera del círculo unidad.
El valor de la ganancia crítica es 7.2231
La respuesta ante escalón es inestable para este valor, como vemos en la siguiente gráfica.





Control del sistema en tiempo discreto
Vemos que no podemos cumplir con todas las especificaciones simplemente con una ganancia proporcional con lo que procedemos a controlar el sistema con un PID:

Para eliminar el error metemos el un integrador, es decir un polo en z=1, con el polo aumentamos el tipo del sistema pero se vuelve más inestable.
Para cumplir con las otras dos especificaciones, la de Sobreoscilación <15% y la de tiempo de establecimiento <3 segundos metemos 2 ceros.
Por tanto nuestro PID es:
Dos ceros en z=0.3 y z=0.9 y un polo en polo z=1 (integrador).

Con esto cumplimos con las especificaciones, teniendo el siguiente lugar de las raíces y la siguiente respuesta ante entrada escalón:



gar5.jpg



afdasd.jpg


Respuesta en SIMULINK

Hemos tenido que calcular con matlab el producto del PID y la función de transferencia y ponerlo todo como un bloque en serie realimentado.

La respuesta que nos da SIMULINK es la siguiente:

Dibujo12.JPG

ue nos da el valor:
u = 5,079595623